<?php
namespace xcom\model;
use x\Xbase;
class Deploy extends Xbase
{

/*逻辑方法=================================================================================*/
    /**
    * 批量保存配置
    * @param array $data 配置数据
    * @return array
    */
    public function batchSave($data = []) {
        foreach ($data as $name => $value) {
            $this->db->update('deploy',['value'=>$value],['name=?',[$name]]);
        }
        return true;
    }
    /**
     * 删除
     * @param  [type] $id [description]
     * @return [type]     [description]
     */
    public function del($id){
        if(!is_array($id)) $id = [$id];
        foreach($id as $i){
            $this->db->delete('deploy',$i);
        }
        return true;
    }
    /**
     * 获取数据库中的配置列表
     * @param array $map_tmp 临时条件
     * @return array 配置数组
     * @internal param $map
     */
    public function lists()
    {
        //合并条件
        $rs = $this->db->cache('select type,name,value from deploy');
        $config = [];
        if ($rs) {
            foreach ($rs as $value) {
                $config[ strtolower($value['name']) ] = $this->parse($value['type'], $value['value']);
            }
        }
        return $config;
    }

    /**
     * 根据配置类型解析配置
     * @param  integer $type 配置类型
     * @param  string  $value 配置值
     * @return array|string
     */
    private function parse($type, $value)
    {
        switch ($type) {
            case 2:
                $value=htmlspecialchars($value);
                break;
            case 3: //解析数组
                $array = preg_split('/[,;\r\n]+/', trim($value, ",;\r\n"));
                if (strpos($value, ':')) {
                    $value = [];
                    foreach ($array as $val) {
                        list($k, $v) = explode(':', $val);
                        $value[ $k ] = $v;
                    }
                } else {
                    $value = $array;
                }
                break;
            case 5:
                 $value=(int)$value;
                break;
        }
        return $value;
    }
}
